package br.com.playonline.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "bolao")
public class Bolao implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	private static final long serialVersionUID = 1L;
	private String identificadorGrupo;
	private Date dtSorteio;
	private Integer qtdCotas;
	private Integer qtdCotasVendidas;
	private Double valorCota;
	private String seqSorteada;
	private Double valorPremio;
	@Column(length = 4000)
	private String descricaoDesdobramento;
	@Enumerated(EnumType.ORDINAL)
	@Column(nullable = false)
	private TipoDeJogo tipoDeJogo;

	private Boolean premiado;
	private Boolean ativo;
	private String numeroConcurso;
	@Enumerated(EnumType.ORDINAL)
	private TipoSerieBolao tipoSerieBolao;

	@OneToMany(mappedBy = "bolao", cascade = CascadeType.DETACH)
	private List<CarrinhoBolao> carrinhoBolaos;

	@OneToMany(mappedBy = "bolao", cascade = CascadeType.DETACH, targetEntity = Resultado.class)
	private List<Resultado> resultados;

	@ManyToMany
	@JoinTable(name = "bolao_desdobramento_rel", joinColumns = { @JoinColumn(name = "id_bolao") }, inverseJoinColumns = { @JoinColumn(name = "id_desdobramento") })
	private List<Desdobramento> desdobramentos;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getIdentificadorGrupo() {
		return identificadorGrupo;
	}

	public void setIdentificadorGrupo(String identificadorGrupo) {
		this.identificadorGrupo = identificadorGrupo;
	}

	public Date getDtSorteio() {
		return dtSorteio;
	}

	public void setDtSorteio(Date dtSorteio) {
		this.dtSorteio = dtSorteio;
	}

	public Integer getQtdCotas() {
		return qtdCotas;
	}

	public void setQtdCotas(Integer qtdCotas) {
		this.qtdCotas = qtdCotas;
	}

	public Double getValorCota() {
		return valorCota;
	}

	public void setValorCota(Double valorCota) {
		this.valorCota = valorCota;
	}

	public TipoDeJogo getTipoDeJogo() {
		return tipoDeJogo;
	}

	public void setTipoDeJogo(TipoDeJogo tipoDeJogo) {
		this.tipoDeJogo = tipoDeJogo;
	}

	public List<CarrinhoBolao> getCarrinhoBolaos() {
		return carrinhoBolaos;
	}

	public void setCarrinhoBolaos(List<CarrinhoBolao> carrinhoBolaos) {
		this.carrinhoBolaos = carrinhoBolaos;
	}

	public Integer getQtdCotasVendidas() {
		return qtdCotasVendidas;
	}

	public void setQtdCotasVendidas(Integer qtdCotasVendidas) {
		this.qtdCotasVendidas = qtdCotasVendidas;
	}

	public List<Resultado> getResultados() {
		return resultados;
	}

	public void setResultados(List<Resultado> resultados) {
		this.resultados = resultados;
	}

	public String getSeqSorteada() {
		return seqSorteada;
	}

	public void setSeqSorteada(String seqSorteada) {
		this.seqSorteada = seqSorteada;
	}

	public Double getValorPremio() {
		return valorPremio;
	}

	public void setValorPremio(Double valorPremio) {
		this.valorPremio = valorPremio;
	}

	public List<Desdobramento> getDesdobramentos() {
		return desdobramentos;
	}

	public void setDesdobramentos(List<Desdobramento> desdobramentos) {
		this.desdobramentos = desdobramentos;
	}

	public String getDescricaoDesdobramento() {
		return descricaoDesdobramento;
	}

	public void setDescricaoDesdobramento(String descricaoDesdobramento) {
		this.descricaoDesdobramento = descricaoDesdobramento;
	}

	public Boolean getPremiado() {
		return premiado;
	}

	public void setPremiado(Boolean premiado) {
		this.premiado = premiado;
	}

	public Boolean getAtivo() {
		return ativo;
	}

	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}

	public String getNumeroConcurso() {
		return numeroConcurso;
	}

	public void setNumeroConcurso(String numeroConcurso) {
		this.numeroConcurso = numeroConcurso;
	}

	public TipoSerieBolao getTipoSerieBolao() {
		return tipoSerieBolao;
	}

	public void setTipoSerieBolao(TipoSerieBolao tipoSerieBolao) {
		this.tipoSerieBolao = tipoSerieBolao;
	}

}
